home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CICA Windows Explosion!
/
The CICA Windows Explosion! - Disc 2.iso
/
programr
/
mathstud.zip
/
DIAG.M
< prev
next >
Wrap
Text File
|
1993-05-28
|
1KB
|
51 lines
function y = diag(X,k)
%y=diag(X,k)
%Extract the diagonal elements of a matrix
%Convert a vector to a diagonal matrix
% S.Halevy 7/31/92
% Copyright (c) 1992 by the MathWizards
if nargin < 1
y=[];
return;
elseif nargin < 2
k=0;
elseif nargin>2
error('diag - too many input arguments')
end
k0=k+1; % k=0 for the main diagonal
if isvector(X) % VECTOR
X=X(:);
nx = length(X);
ny = nx + abs(k);
y=zeros(ny);
k0 = expr_sel(k>=0,ny*k,abs(k))+1;
for ik=1:nx
y(k0)=X(ik);
k0 += ny+1;
end
else % MATRIX
[m,n] = size(X);
mstep = m+1;
k0=1;
if k>0
k0+=m*k; % first element
n -= k; % row shift
else % negative k
k0 += (-k); % first element
m -= (-k); % col shift
end
k0 = max(1, k0); % first element
ny = max(0, min(m,n)); % size of output
y=zeros(ny,1); % empty if ny<=0
if ny>0
iy=1:ny;
y(iy)=X(k0+mstep*(iy-1))';
end
end